C1 = c(1,2,3)
C2 = c("a","b","c")
C3 = c(TRUE,FALSE)   5 基本数据结构
5.1 向量
5.1.1 概念:
向量是用”c()”符号包裹的一组相同类型元素构成的东西。如果每个元素有名字,则叫具名向量。
class()可以查看向量的类型,可以看到C1是数字型,C2是字符型,C3是逻辑型
class(C1)[1] "numeric"class(C2)[1] "character"class(C3)[1] "logical"如果我非要把不同类型的元素放到一起呢
c4 = c(123,"a",TRUE)
class(c4)[1] "character"c4[1] "123"  "a"    "TRUE"c5 = c(123,TRUE,FALSE)
class(c5)[1] "numeric"c5[1] 123   1   0答案是: 按照 字符型,数字型,逻辑型的顺序保留向量的类型
具名向量
c4 = c("A" = 1,"B"=2,"C" = 3)
c4A B C 
1 2 3 names(c4)[1] "A" "B" "C"5.1.2 基本用法
5.1.2.1 合并向量
c5 = c(1,2,3)
c6 = c("4","5","6")
c7 = c(c5,c6)
c7[1] "1" "2" "3" "4" "5" "6"5.1.2.2 判断某个元素是否属于某个向量
c("1","2","8") %in% c7[1]  TRUE  TRUE FALSE5.1.2.3 访问子集
c8 = c(11,12,14,15)
c8[1]       # 获取第一个元素[1] 11c8[2:3]     # 获取第2到第3个元素[1] 12 14c8[-2]      # 获取除了第2个元素之外的元素[1] 11 14 15c8[c(TRUE,FALSE,TRUE,FALSE)] # 根据逻辑值,获取元素[1] 11 14c8[c8<13]   # 根据条件判断获取元素[1] 11 12c4 = c("A" = 1,"B"=2,"C" = 3)
c4["B"]    # 根据名字获取元素B 
2 5.1.3 常用基础函数
c9 = c(-2,2,5,9,9,NA,10)
length(c9)  # 返回长度[1] 7unique(c9)  # 返回唯一值[1] -2  2  5  9 NA 10sort(c9,decreasing = T)    # 排序[1] 10  9  9  5  2 -2min(c9,na.rm = T)   # 最小值[1] -2max(c9,na.rm = T)   # 最大值[1] 10mean(c9,na.rm = T)  # 平均值[1] 5.5sum(c9,na.rm = T)   # 和[1] 33sd(c9,na.rm = T)    # 标准差[1] 4.764452abs(c9)             # 绝对值[1]  2  2  5  9  9 NA 10log(c9,base = 2)    # 对数Warning: 产生了NaNs[1]      NaN 1.000000 2.321928 3.169925 3.169925       NA 3.3219285.2 因子
5.2.1 概念
因子是在向量的基础上多了个level。俗称,分类向量。
例如,学生成绩”优”,“良”,“差”
grade = c("差","优","良","良")
grade[1] "差" "优" "良" "良"grade2 = factor(grade,levels = c("优","良","差"))
grade2[1] 差 优 良 良
Levels: 优 良 差5.2.2 常见作用
5.2.2.1 自定义排序
后续画图中尤为常见,可以按照level的水平排序
sort(grade) [1] "差" "良" "良" "优"sort(grade2)[1] 优 良 良 差
Levels: 优 良 差5.2.2.2 统计个数
table(grade2)    # table函数返回各个因子水平的个数grade2
优 良 差 
 1  2  1 score = c(50,70,95,80)
cut(score,       # cut函数返回因子 
    breaks = c(0,60,90,100),
    labels = c("差","良","优秀"))[1] 差   良   优秀 良  
Levels: 差 良 优秀5.3 列表
5.3.1 概念
用list()符号包裹住的各种对象,甚至是列表套列表。(熟悉别的编程语言的话,类似与json文件或者python中的字典)
# 定义
list1  =list(
"A" = c(1,2,3),
"B" = factor(c(1,5,6)),
"C" = list(
  "C1" = c(1,3,4)
),
c("q","w","e")
)5.3.2 获取子集
list1$A[1] 1 2 3list1["A"]$A
[1] 1 2 3list1[1]$A
[1] 1 2 3list1[[1]][1] 1 2 35.3.3 常用函数
unlist(),把列表解开成一个向量
unlist(list1)   A1    A2    A3    B1    B2    B3 C.C11 C.C12 C.C13                   
  "1"   "2"   "3"   "1"   "2"   "3"   "1"   "3"   "4"   "q"   "w"   "e" 5.4 数据框
5.4.1 概念
表格结构。
底层是个相同长度的向量构成的列表。
# 定义
# R base 方式
data1 = data.frame(
  "a" = c(1,2,3),
  "b" = c(4,5,6),
  "c" = c(7,8,9)
)
data1  a b c
1 1 4 7
2 2 5 8
3 3 6 9# tibble
data2 = tibble::tibble(
  "a" = c(1,2,3),
  "b" = c(4,5,6),
  "c" = c(7,8,9)
)
data2# A tibble: 3 x 3
      a     b     c
  <dbl> <dbl> <dbl>
1     1     4     7
2     2     5     8
3     3     6     95.4.2 访问子集
data2[1]   # 访问第一列# A tibble: 3 x 1
      a
  <dbl>
1     1
2     2
3     3data2[,1]  # 访问第一列# A tibble: 3 x 1
      a
  <dbl>
1     1
2     2
3     3data2[2,1] # 访问第2行第1列# A tibble: 1 x 1
      a
  <dbl>
1     2data2["a"] # 访问名字为“a”的列,返回数据框# A tibble: 3 x 1
      a
  <dbl>
1     1
2     2
3     3data2$a    # 访问名字为“a”的列,返回向量[1] 1 2 35.4.3 常用函数
dim(data2)   # 查看数据框,几行几列  [1] 3 3nrow(data2)  # 数据框,几行[1] 3ncol(data2)  # 数据框,几列[1] 3str(data2)      # 数据框各列的类型tibble [3 x 3] (S3: tbl_df/tbl/data.frame)
 $ a: num [1:3] 1 2 3
 $ b: num [1:3] 4 5 6
 $ c: num [1:3] 7 8 9names(data2)    # 返回列名[1] "a" "b" "c"colnames(data2) # 返回列名[1] "a" "b" "c"rownames(data2) # 返回行名[1] "1" "2" "3"结语:数据框基本上是最常用的数据类型,这个小节,只简单介绍一下数据框,后面的tidyverse系列内容中的dplyr包和tidyr包在重点讲解数据框有关的操作(数据重塑,数据连接,修改列,数据筛选,数据合并,分组汇总等)